// 工具函数，封装好后便于其他文件调用
// createPool：负责初始化，创建数据库连接池
// executeSql：负责执行，提供安全的SQL执行接口

import mysql2 from 'mysql2/promise';

// 全局变量，执行sql语句时也需要
// 数据库连接池对象
let pool = null;

export const createPool = function () {
  pool = mysql2.createPool({
    host: process.env.DB_HOST,
    port: process.env.DB_PORT,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASES,
    // 将数据库中的日期/时间字段以字符串格式返回，而不是Date对象
    dateStrings: true,
  });
};

export const executeSql = async function (sql, params = []) {
  // 存储连接对象
  let conn = null;
  try {
    conn = await pool.getConnection();// 从池中借用连接
    // 负责执行SQL语句，只要数据，不要表结构
    let [data] = await conn.execute(sql, params);
    return data;
  } catch (error) {
    throw error;
  } finally {
    if (conn) {
      conn.release(); // 归还连接
      conn = null;
    }
  }
};
